//package com.yv.security.core.social.qq.api;
//
//import org.apache.commons.lang.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.social.oauth2.AbstractOAuth2ApiBinding;
//import org.springframework.social.oauth2.TokenStrategy;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
///**
// * 地址可以通过QQ互联-文档资料-api文档中查看
// * 相当于流程图里的Api部分
// * 不能使用@Component,加上此注解就是单例的，不能使用单例， 因为对每个用户都会实例化一个QQImpl
// * @author Administrator
// *
// */
//public class QQImpl extends AbstractOAuth2ApiBinding implements QQ{
//	
//	private Logger logger = LoggerFactory.getLogger(this.getClass());
//	// 获取用户openid,这里是qq号
//	private static final String URL_GET_OPENID = "https://graph.qq.com/oauth2.0/me?access_token=%s";
//	// 获取用户信息， 参数中没有access_token，是因为父类中已经处理了
//	private static final String URL_GET_USERINFO = "https://graph.qq.com/user/get_user_info?&oauth_consumer_key=%s&openid=%s";
//	private String appId;
//	private String openId;
//	
//	private ObjectMapper objectMapper = new ObjectMapper();
//	
//	// ACCESS_TOKEN_PARAMETER的含义是使用restTemplate发送请求是会自动把access_token作为url中参数挂上去
//	public QQImpl(String accessToken, String appId) {
//		super(accessToken, TokenStrategy.ACCESS_TOKEN_PARAMETER);
//		this.appId = appId;
//		String url = String.format(URL_GET_OPENID, accessToken);
//		String result = getRestTemplate().getForObject(url, String.class);
//		logger.info("---[QQImpl] get openid result: "+result);
//		// qq互联-文档-网站应用-网站开发流程-获取用户openid   返回：callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
//		this.openId = StringUtils.substringBetween(result, "\"openid\":","}");
//	}
//	
//	@Override
//	public QQUserInfo getUserInfo() {
//		String url = String.format(URL_GET_USERINFO, appId, openId);
//		String result = getRestTemplate().getForObject(url, String.class);
//		try {
//			return objectMapper.readValue(result, QQUserInfo.class);
//		} catch (Exception e) {
//			throw new RuntimeException("---[QQImpl] Failed to get user Info.");
//		}
//	}
//
//}
